First we set it all up
from openseries.frame import OpenFrame
from openseries.series import OpenTimeSeries
from plotly.offline import init_notebook_mode
from plotly.offline import iplot
init_notebook_mode()
Here we fetch NAV (price per unit) for some of the Captor mutual funds
basket = OpenFrame(
[
OpenTimeSeries.from_open_nav(isin="SE0009807308"),
OpenTimeSeries.from_open_nav(isin="SE0011337195"),
OpenTimeSeries.from_open_nav(isin="SE0011670843"),
], weights=[
0.25,
0.25,
0.50])
basket = basket.trunc_frame().to_cumret()
We then make a portfolio of the funds based on the provided weights
portfolio = OpenTimeSeries.from_df(basket.make_portfolio("Portfolio"))
basket = basket.add_timeseries(portfolio)
And create a Plotly plot of all the data
figure, _ = basket.plot_series(tick_fmt=".1%", auto_open=False, output_type="div")
We display the plot in the notebook
figure = figure.update_layout(legend=dict(yanchor="bottom", y=-0.22, xanchor="right", x=0.98, orientation="h"))
iplot(figure, link_text="")
Here we calculate and display a Pandas Dataframe with some analyses
df = basket.all_properties(properties=[
"arithmetic_ret",
"vol",
"ret_vol_ratio",
"sortino_ratio",
"worst_month",
"cvar_down",
"first_indices",
"last_indices",
]
)
df.columns = df.columns.droplevel(level=1)
formats = [
"{:.2%}",
"{:.2%}",
"{:.2f}",
"{:.2f}",
"{:.2%}",
"{:.2%}",
"{:%Y-%m-%d}",
"{:%Y-%m-%d}",
]
for item, f in zip(df.index, formats):
df.loc[item] = df.loc[item].apply(
lambda x: x if isinstance(x, str) else f.format(x)
)
df
| Captor Iris Bond | Captor Dahlia Green Bond | Captor Scilla Global Equity | Portfolio | |
|---|---|---|---|---|
| Arithmetic return | -4.12% | -2.76% | 6.37% | 1.47% |
| Volatility | 6.52% | 3.40% | 12.74% | 7.12% |
| Return vol ratio | -0.63 | -0.81 | 0.50 | 0.21 |
| Sortino ratio | -0.88 | -1.08 | 0.66 | 0.27 |
| Worst month | -6.49% | -4.83% | -12.25% | -7.54% |
| CVaR 95.0% | -0.99% | -0.58% | -2.00% | -1.13% |
| first indices | 2019-02-12 | 2019-02-12 | 2019-02-12 | 2019-02-12 |
| last indices | 2022-11-17 | 2022-11-17 | 2022-11-17 | 2022-11-17 |
Thank you for listening